2.3.1 Die Grundform mit WHERE
Mehrere Tabellen gleichzeitig verbinden
Die Ausgabeliste ist in unserem Beispiel absolut wertlos, es zeigt aber,
zu welchen Ergebnissen auch fehlerhafte WHERE
-Anweisungen führen können.
Es sei an dieser Stelle darauf hingewiesen, dass bei Verwendung der WHERE
-Anweisung
immer zuerst das Kreuzprodukt der zu verbindenden Tabellen gebildet wird
und erst dann die Ergebnisse nach dem zu vergleichenden Attribut durchsucht
und zusammengefasst werden. Das ist bei einer Abfrage mehrerer und sehr langer
Tabellen zu beachten, da das leicht zu Performanceproblemen führen kann.
Um dem aus dem Wege zu gehen, lernen wir die JOIN
-Anweisung später noch
näher kennen, die dasselbe Ergebnis liefert. Doch zuerst wollen wir
unsere Verbundabfrage noch ein wenig erweitern. Und fragen uns: Wie können wir weitere Tabellen
verbinden?
Wir wollen jetzt neben den drei Attributen aus dem vorherigen Abschnitt noch einen Eintrag
aus einer weiteren Tabelle anzeigen lassen. Es gibt ja weitere Tabellen, die mit der Tabelle tbl_mitarbeiter
in Beziehung stehen.
Daher stellen wir jetzt eine Verknüpfung mit der Tabelle tbl_titel her. Die Verweise darauf
befinden sich in der Spalte titel_ID (Fremdschlüssel der Tabelle Mitarbeiter).
Die Tabelle tbl_titel enthält ein Attribut mit gleichem Namen hier aber als
Primärschlüssel. Daher wird sie auch als Mastertabelle bezeichnet. Mitarbeiter
ist dagegen die so genannte Detailtabelle. In der Abfrage wird die Mastertabelle immer zuerst genannt.
Wir suchen in diesen Spalten nach zueinander passenden Paaren und schreiben
in unsere Ergebnisliste zu allen Mitarbeitern die entsprechende Titel.
Unsere SQL-Anweisung können wir entsprechend erweitern. Zusätzliche
Bedingungen müssen in der WHERE
-Anweisung mit AND
hinzugefügt werden.
Nach dem Hinzufügen aller benötigten Tabellen und Attribute entsteht die Form:
SELECT tbl_titel.titel, name, abteilungsname, abteilung_aufgabengebiet FROM tbl_abteilung, tbl_titel, tbl_mitarbeiter WHERE tbl_abteilung.abteilung_ID=tbl_mitarbeiter.abteilung_ID AND tbl_titel.titel_ID=tbl_mitarbeiter.titel_ID
Abfrage ausführen Wenn wir diese Abfrage ausführen, sehen wir, dass sich im Vergleich zur ersten die Anzahl der Ergebnisse – eben alle Mitarbeiter – nichts verändert hat. Lediglich die Spalte Titel ist hinzugekommen. Das war also gar nicht so schwer.